package com.changgou.search.service.impl;

import com.changgou.search.service.EMSManagerService;

public class EMSManagerServiceImpl implements EMSManagerService {

  //基于es的模板类创建索引库结构的创建
  @Autowired
  private ElasticsearchTemplate elasticsearchTemplate;

  @Autowired
  private SkuFeign skuFeign;  //我们下面需要查询所有的sku

  @Autowired
  private ESManagerMapper esManagerMapper;

  /**
   * 创建索引结构
   */
  @Override
  public void createMappingAndIndex() {
    //创建索引:根据索引库映射的实体类创建索引
    elasticsearchTemplate.createIndex(SkuInfo.class);
    //创建映射
    elasticsearchTemplate.putMapping(SkuInfo.class);
  }

  @Override
  public void importAll() {
    //查询sku集合
    List<Sku> skuList = skuFeign.findSkuListBySpuId("all");
    if (skuList == null || skuList.size() <= 0) {
      throw new RuntimeException("当前没有数据被查询到,无法导入索引库");
    }


    //skulist为skuinfo,首先转换为json
    String jsonSkuList = JSON.toJSONString(skuList);
    //然后将json转换为skuinfo
    List<SkuInfo> skuInfoList = JSON.parseArray(jsonSkuList, SkuInfo.class);

    for (SkuInfo skuInfo : skuInfoList) {
      //将规格信息Spec转换为map
      Map specMap = JSON.parseObject(skuInfo.getSpec(), Map.class);
      skuInfo.setSpecMap(specMap);
      //导入索引库
      esManagerMapper.saveAll(skuInfoList);
    }
  }

  /**
   * 根据spuId查看skuList添加到索引库
   * @param spuId
   */
  @Override
  public void importDataBySpuId(String spuId) {
    List<Sku> skuList = skuFeign.findSkuListBySpuId(spuId);
    if (skuList == null || skuList.size() <= 0) {
      throw new RuntimeException("当前没有数据被查询到,无法导入索引库");
    }
    //将集合转换为json
    String jsonSkuList = JSON.toJSONString(skuList);
    List<SkuInfo> skuInfoList = JSON.parseArray(jsonSkuList, SkuInfo.class);
    for (SkuInfo skuInfo : skuInfoList) {
      //将规格信息进行转换
      Map specMap = JSON.parseObject(skuInfo.getSpec(), Map.class);
      skuInfo.setSpecMap(specMap);
    }
    //添加索引库
    esManagerMapper.saveAll(skuInfoList);
  }

  //3. 根据spuid删除索引库中的sku数据
  @Override
  public void deleteDataBySpuId(String spuId) {
    List<Sku> skuList = skuFeign.findSkuListBySpuId(spuId);
    if (skuList == null || skuList.size() <= 0) {
      throw new RuntimeException("当前没有数据被查询到,无法导入索引库");
    }
      for(Sku sku : skuList){
        esManagerMapper.deleteById(Long.parseLong(sku.getId)); //根据id删除
      }

  }
}
}
